import java.util.Random;

public class Boolarray {
	
	private boolean ray[];
	private int wahr;	
		//konstruktoren
	public Boolarray(){}
	public Boolarray( int n ){
			this.ray = new boolean [n];
		}
	//versuch eines selbstgeschriebenen hardcopy kopierkonstruktors
	public Boolarray( Boolarray boolray){
		ray = new boolean[boolray.getRayLen()];
		for( int i=0; i<ray.length; i++)
			ray[i]=boolray.getRay(i);
	}
	//getter und setter
	public int getRayLen(){
		return ray.length;
	}
	public boolean[] getRay() {
		return ray;
	}
	public boolean getRay(int n){
		return this.ray[n];
	}
	public int getWahr(){
		return this.wahr;
	}
	public void setRay(boolean ray[]) {
		this.ray = ray;
	}
	public void setRay(int index, boolean b ){
		if( index >= ray.length )
			return;
		this.ray[index]=b;
	}
	public void setRayWahr(int n){
		this.wahr=n;
	}
	
	/*methoden für das array*/
	//printed das array ray

	public void showRay(){
		for(int i=0; i < this.ray.length; i++)
			 System.out.println("ray[" + i + "] = " + this.ray[i]);
	}
	//füllt das array zufällig mit true oder false
	public void fillRandom(){
		for(int i=0; i<ray.length; i++ )
			ray[i] = new Random().nextBoolean();
	}
	//füllt das array ray alternierend
	public void fillAltnrnd(){
		for(int i=0; i<this.ray.length; i++)
			ray[i]=(i%2==0)?true:false;
	}
	//füllt das array ray vom ersten an mit n true werten
	public int fillFirstN(int n){
		int i;
		for(i=0; i<this.ray.length; i++)
			this.ray[i]=i<n?true:false;
		return i;
	}
	//Zählt die anzahl von wahren werten
	public int countTrue(){
		int anz=0;
		for(int i=0; i<this.ray.length; i++)
			if( this.ray[i] == true ) anz++;
		return anz+1;
	}
	//Zählt die anzahl von wahren werten von 0<= x < y <UE
	public int countLim(int x, int y){
		int i=0;
		y=(y>=ray.length)?ray.length-1:y;
		x=(x>=ray.length)?ray.length-1:x;
		if(x>y){
			int tmp=y;
			y=x;
			x=tmp;
		}
		if(x==y && this.ray[x]==true)
			return 1;
		
		for(; x<y; x++)
			if(this.ray[x] == true) i++;
		
		return i;
	}
}
